Skip to content

Conversation

@03do-new30
Copy link
Contributor

🧷 문제 링크

https://www.acmicpc.net/problem/13019

🧭 풀이 시간

60 분

👀 체감 난이도

✏️ 문제 설명

  • A를 B로 바꿀 수 있는 최소 연산 횟수를 구하자.

🔍 풀이 방법

  • 머리가 안돌아가서 구글링했다 😥

  • A를 B로 바꿀 수 없는 경우를 판단하는 것은 쉽다.

  • 모든 문자를 바꿔보지 않아도 된다.

  • A와 B의 포인터를 뒤에서부터 설정해주고 일치 여부를 확인한다.

    • A[A포인터] == B[B포인터]라면 일치하므로 연산을 수행하지 않고 넘어간다.
      • A포인터--, B포인터-- 수행
    • A[A포인터] != B[B포인터]라면 A포인터 자리에 있던 문자를 현재 자리에서 치워줘야 B 문자와 가까워지겠다. 연산을 수행한다.
      • A포인터-- 수행
      • B포인터는 그대로 두고, 다음에 A포인터가 가리킬 문자는 일치하기를 바란다. 두근두근~
  • 예제 입력 5를 예로 들자면 아래와 같은 동작을 하며 최소 연산 횟수를 구한다.

    (괄호)로 표시된 부분은 연산을 수 시 앞으로 오게 되는 문자를 나타낸 것인데, 문제 풀이 시 실제로 앞으로 옮겨주는 동작은 안해도 된다. 이해를 위한 표현임.

    중요한 건 최소 연산 횟수를 구하는 것.

    • 동작 1: 연산횟수 0
      • A: DCABA 일치
      • B: DACBA
    • 동작 2: 연산횟수 0
      • A: DCAB 일치
      • B: DACB
    • 동작 3: 연산횟수 1
      • A: DCA 불일치 -> (A)DC
      • B: DAC
    • 동작 4: 연산횟수 1
      • A: (A)DC 일치
      • B: DAC
    • 동작 5: 연산횟수 2
      • A: (A)D 불일치-> (DA)
      • B: DA
    • A 포인터가 더는 움직일 곳이 없으므로 종료!

⏳ 회고

  • 배움이 부족하다 ^^ 처음에 모든 문자 연산 시도하다 터짐
  • 잘 설명하는 것이 생각보다 어렵다.
  • 컨디션이 집중력과 직결된다.

@ShinHeeEul ShinHeeEul merged commit 876cd8e into main Feb 6, 2025
1 check passed
@03do-new30 03do-new30 added the fail 😢 해설을 보고 풀었거나, 못 풀었을 때 label Feb 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fail 😢 해설을 보고 풀었거나, 못 풀었을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants